#ifndef HTTPMGR_H
#define HTTPMGR_H
#include <QObject>
#include "singleton.h"
#include <QNetworkAccessManager>
#include "global.h"
#include <QJsonObject>
#include <QJsonDocument>
#include <memory>
//多重继承，表示isA语义
class HttpMgr :public QObject ,public Singleton<HttpMgr>,public std::enable_shared_from_this<HttpMgr>
{
    Q_OBJECT
private:
    HttpMgr();
    QNetworkAccessManager _manager;  //QT的网络管理类，底层已经为我们写好了，消息的收发直接封装，我们是在其基础上又做了一层封装
public:

    friend class Singleton<HttpMgr> ;
    
    //发送消息，发送的URL接口，发送的消息，发送ID，以及发送的模块
    void PostHttpreq(QUrl url,QJsonObject json,ReqId req_id,Modules mod);
    ~HttpMgr();
signals:

    //客户端处理reply是否失败的信号，因为不需要发送到其他的模块，所以回调函数卸载httpmgr终
    void sig_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod);

    //信号，发送到注册模块的信号，包括携带信息，因为要交给固定的模块进行使用，所以要发送到其他模块，进行调用
    void sig_reg_mod_finish(ReqId id, QString res, ErrorCodes err);

    //客户款处理修改密码的对应的逻辑
    void sig_reset_mode_finish(ReqId id, QString res, ErrorCodes err);


    //登录模块处理的
    void sig_login_mod_finish(ReqId id, QString res, ErrorCodes err);
public slots:

    //http底层信号--回调--->(mgr管理者结束信号)--->mgr管理者槽函数---->(客户端显示信号)--->客户端槽函数，一共是3个消息传递
    //（底层事件---->底层回调）----->（管理者http结束事件-->管理者回调）---->（管理者发送给客户端你事件--->客户端对应组件显示）
    void slot_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod);

};



#endif // HTTPMGR_H
